'use strict';
const fs = require('fs');
function addMapping(router,mapping)   //mapping存贮了url处理函数对象。通过[***]可访问对象中不同的处理函数
{
    for(var url in mapping)   //遍历mapping 的属性（暴露的函数接口）
    {
        console.log(url);
        if(url.startsWith('GET '))
        {
            var path=url.substring(4);
            router.get(path,mapping[url]);
            console.log(`register URL mapping: GET ${path}`);
        }
        else if(url.startsWith('POST '))
        {
            var path=url.substring(5);
            router.post(path,mapping[url]);
            console.log(`register URL mapping: GET ${path}`);
        }
        else
        {
            console.log(`invalid URL: ${URL}`);
        }
    }
}
function addControllers(router,dir)  //dir 存贮具体url处理函数
{
    var files=fs.readdirSync(__dirname+'/'+dir);  //readdir  读取指定目录下的所有文件名 返回字符串数组

    //过滤出js文件
    var js_files=files.filter((f)=>     //将所有处理url的函数 存入js_files
    {
        return f.endsWith('.js');
    });
    for(var f of js_files)
    {
        console.log(`process controller: ${f}...`);
        let mapping =require(__dirname+'/controllers/'+f); //require请求module，存入mapping中
        addMapping(router,mapping);
    }
}

module.exports=function(dir)
{
    let controller_dir=dir||'controllers'; //controllers下面有具体处理url的函数
    let router=require('koa-router')();
    addControllers(router,controller_dir); 
    return router.routes();
}